package jgespres;

import java.sql.*;

/**
 * Gestion d'un poste du planning
 * 
 * @author guefyld
 * @version 2.0
 */
public class PlanningPost {
    // Description du poste
    private PlanningPostId id;
    private String stdExtra;
    private int session;
    private int thmId;
    private int hlpId;
    private String hlpExtra;
    private int status;
    private String extra;
    private boolean separator;

    /**
     * Constructor for objects of class PlanningPost
     */
    public PlanningPost() {
        id        = null;
        stdExtra  = jgespres.NULL;
        session   = 0;
        thmId     = 0;
        hlpId     = 0;
        hlpExtra  = jgespres.NULL;
        status    = 0;
        extra     = jgespres.NULL;
    }

    public PlanningPost(PlanningPostId id) {
        this();
        this.id = id;
    }
    
    /**
     * Renvoi Id. du poste
     * 
     * @return  Id. du poste
     */
    public final PlanningPostId getId() {
        return id;
    }
    
    /**
     * Renvoi date du poste
     * 
     * @return  Date du poste
     */
    public final Date getDate() {
        return id != null ? id.date : null;
    }
    
    /**
     * Renvoi Id. Eléve affecté au poste
     * 
     * @return  Id. Elève affecté au poste
     */
    public final int getStudentId() {
        return id != null ? id.stdId : 0;
    }
    
    /**
     * Renvoi Données extra référent à l'élève affecté au poste
     * 
     * @return  Données extra
     */
    public final String getStudentExtra() {
        return stdExtra;
    }

    /**
     * Renvoi session du poste
     * 
     * @return  Nom de la session
     */
    public final int getSession() {
        return session;
    }
    
    /**
     * Renvoi Id. Theme affecté au poste
     * 
     * @return  Id. Theme affecté au poste
     */
    public final int getThemeId() {
        return thmId;
    }

    /**
     * Renvoi Id. Aide affecté au poste
     * 
     * @return  Id. Aide affecté au poste
     */
    public final int getHelperId() {
        return hlpId;
    }
    
    /**
     * Renvoi Données extra référent à l'aide affecté au poste
     * 
     * @return  Données extra
     */
    public final String getHelperExtra() {
        return hlpExtra;
    }
    
    /**
     * Renvoi indicateur poste annulé
     * 
     * @return  Indicateur poste annulé
     */
    public final int getStatus() {
        return status;
    }
    
    /**
     * Renvoi informations suplémentaires affectées au poste
     * 
     * @return  Données suplémentaires
     */
    public final String getExtra() {
        return extra;
    }

    /**
     * Indicateur si séparateur
     * 
     * @return      Séparateur?
     */
    public final boolean isSeparator() {
        return separator;
    }
    
    /**
     * Affectation Id. d'un poste
     * 
     * @param id   Id. du poste
     */
    public final void setId(PlanningPostId id) {
        this.id = id;
    }
    
    /**
     * Affectation Date du poste
     * 
     * @param date   Date du poste
     */
    public final void setDate(Date date) {
        if (id == null) 
            id = new PlanningPostId(date, 0);
        else 
            id.date = date;
    }
    
    /**
     * Affectation d'un élève à un poste du planning
     * 
     * @param stdId     Id. Elève
     * @param stdExtra  Données suplémetaires
     */
    public final void setStudent(int stdId, String stdExtra) {
        if (id == null) 
            id = new PlanningPostId(null, stdId);
        else 
            id.stdId = stdId;
        this.stdExtra = stdExtra != null ? stdExtra : jgespres.NULL;
    }
    
    /**
     * Affectation d'un thème à un poste du planning
     * 
     * @param session   Session
     * @param thmId     Id. du thème
     */
    public final void setTheme(int session, int thmId) {
        this.session = session;
        this.thmId = thmId;
    }
    
    /**
     * Affectation d'un aide à un poste du planning
     * 
     * @param hlpId     Id. Aide
     * @param hlpExtra  Données suplémetaires
     */
    public final void setHelper(int hlpId, String hlpExtra) {
        this.hlpId = hlpId;
        this.hlpExtra = hlpExtra != null ? hlpExtra : jgespres.NULL;
    }
        
    /**
     * Affectation indicateur Annulé à un poste du planning
     * 
     * @param cnl   Indicateur poste annulé
     */
    public final void setStatus(int status) {
        this.status = status;
    }
    
    /**
     * Affectation informations suplémentaires à un poste du planning
     * 
     * @param extra Données suplémentaires
     */
    public final void setExtra(String extra) {
        this.extra = extra != null ? extra : jgespres.NULL;
    }

    /**
     * Mise à jour indicateur si séparateur
     * 
     * @return      Statut poste
     */
    public final void setSeparator(boolean sep) {
        this.separator = sep;
    }
    
    /**
     * Renvoi une chaine décrivant l'objet
     * 
     * @return      Chaine décrivant l'objet.
     */
    public String toString() {
        return "PlanningPost[date="+id.date+"; stdId="+id.stdId+"; stdExtra="+stdExtra+"; session="+session+"; thmId="+thmId+"; hlpId="+hlpId+"; hlpExtra="+hlpExtra+"; status="+status+"; extra="+extra+"; sep="+separator+"]";
    }
}